#include<bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn=1e6+10;
int n;

// 先找到 最大的 质 因子 p2
// 然后 x2 的区间就是  p2+1, n
// 然后枚举这个区间 , 对于区间中的每个数再求最大质因子, 那么对应的最小值就是该 质因子+1

int prime[maxn], cnt;
int maxFac[maxn];
bitset<maxn> vis;
void getmaxprime(int x){ // 最大质因子
	for(int i=2;i<=x;i++){
		if(!vis[i]){
			prime[++cnt]=i; // 是素数
			maxFac[i]=i;
		}
		for(int j=2;i*j<=x;j++){ // 除去合数
			vis[i*j]=1;
			maxFac[i*j]=max(maxFac[i], maxFac[j]);
		}
	}
}

void solve(){
	cin>>n;
	int ans=1e18;
	getmaxprime(n);
	if(!vis[n]){ // 本身是一个质数
		cout<<-1<<'\n';
		return;
	}
	int cnt=n/maxFac[n];
	int mn=(cnt-1)*maxFac[n]+1;
	for(int i=mn;i<=n;i++){
		if(!vis[i]){
			ans=min(ans, i);
			continue;
		}
		cnt=i/maxFac[i];
		int tmp=(cnt-1)*maxFac[i]+1;
		ans=min(ans, tmp);
	}
	cout<<ans<<"\n";
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0),cout.tie(0);
	solve();
	return 0;
}
